package com.ruoyi.imports.listener;

import com.alibaba.excel.context.AnalysisContext;

import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils;
import com.ruoyi.imports.domain.ProcessExcelData;

import java.util.ArrayList;
import java.util.List;

/**
 * EasyExcel 监听器：仅用于读取 Excel 内容，不涉及数据库操作
 */
public class ProcessExcelDataListener implements ReadListener<ProcessExcelData> {
    // 表头行数（根据实际Excel调整，例如前4行是表头则设为4）
    private static final int HEADER_ROW_COUNT = 4;
    private static final int BATCH_COUNT = 500;

    private List<ProcessExcelData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
    /**
     * 存储解析后的 Excel 数据
     */
    private final List<ProcessExcelData> dataList = new ArrayList<>();
    // 行索引从0开始
    private int currentRowIndex = 0;
    /**
     * 获取解析后的 Excel 数据
     */
    public List<ProcessExcelData> getDataList() {
        return dataList;
    }

    /**
     * 每解析一行数据触发
     */
    @Override
    public void invoke(ProcessExcelData data, AnalysisContext context) {
        currentRowIndex=context.readRowHolder().getRowIndex();

        if (currentRowIndex < HEADER_ROW_COUNT) {
            return;
        }
        // 检查关键字段是否为空
        if (data.getDate() == null || data.getTime() == null) {
            System.out.println("忽略无效数据（日期/时间为空），第 " + (currentRowIndex + 1) + " 行：" + data);
            return;
        }

        cachedDataList.add(data);
        if (cachedDataList.size() >= BATCH_COUNT) {
            // 处理批量数据（可选）
            cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }

        System.out.println("日期：" + data.getDate() + "，时间：" + data.getTime());
        dataList.add(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("Excel 数据读取完成，共 " + dataList.size() + " 行");
    }
}